
#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	СтруктураИсточник = Новый Структура;
	Если Параметры.Свойство("ХранилищеКонтейнераЗначения") Тогда
		//@skip-check unknown-form-parameter-access
		ХранилищеКонтейнтейнера = Параметры.ХранилищеКонтейнераЗначения;//см. УИ_ОбщегоНазначенияКлиентСервер.НовыйХранилищеЗначенияТипаСтруктура
		
		Если ХранилищеКонтейнтейнера <> Неопределено Тогда
			СтруктураИсточник = УИ_ОбщегоНазначения.ЗначениеИзХранилищаКонтейнераСтруктуры(ХранилищеКонтейнтейнера);
		КонецЕсли;
	ИначеЕсли Параметры.Свойство("СтруктураДляИзменения") Тогда 
		//@skip-check unknown-form-parameter-access
		СтруктураИсточник = Параметры.СтруктураДляИзменения;
	КонецЕсли;
	
	ПрочитатьСтруктуруВТаблицу(СтруктураИсточник);
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаСтрукутуры


&НаКлиенте
Процедура ТаблицаСтрукутурыПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
	Если ОтменаРедактирования Тогда
		Возврат;
	КонецЕсли;
	ТекДанные = Элементы.ТаблицаСтрукутуры.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Не УИ_ОбщегоНазначенияКлиентСервер.ИмяПеременнойКорректно(ТекДанные.Ключ) Тогда
		Отказ = Истина;
	КонецЕсли;
КонецПроцедуры


&НаКлиенте
Процедура ТаблицаСтрукутурыЗначениеПриИзменении(Элемент)
	ТекДанные = Элементы.ТаблицаСтрукутуры.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;

	ПараметрыОбработчика = УИ_ОбщегоНазначенияКлиент.НовыйПараметрыОбработчикаСобытияПриИзменении(ЭтотОбъект,
																								  Элемент,
																								  "Значение");
	ПараметрыОбработчика.ДоступенКонтейнер = Истина;
	ПараметрыОбработчика.СтруктураХраненияЗначения = ТекДанные;

	УИ_ОбщегоНазначенияКлиент.ПолеФормыОбработчикПриИзменении(ПараметрыОбработчика);
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаСтрукутурыЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	ТекДанные = Элементы.ТаблицаСтрукутуры.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		ВозвраТ;
	КонецЕсли;
	
	ПараметрыОбработчика = УИ_ОбщегоНазначенияКлиент.НовыйПараметрыОбработчикаСобытияНачалоВыбораЗначения(ЭтотОбъект,
																										  Элемент,
																										  "Значение");
	ПараметрыОбработчика.ДоступенКонтейнер = Истина;
	ПараметрыОбработчика.Значение = ТекДанные.Значение;
	ПараметрыОбработчика.СтруктураХраненияЗначения = ТекДанные;
	ПараметрыОбработчика.НаборТипов = УИ_ОбщегоНазначенияКлиентСервер.ВсеНаборыТиповДляРедактирования();

	УИ_ОбщегоНазначенияКлиент.ПолеФормыОбработчикНачалоВыбораЗначения(ПараметрыОбработчика, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаСтрукутурыЗначениеОчистка(Элемент, СтандартнаяОбработка)
	ТекДанные = Элементы.ТаблицаСтрукутуры.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыОбработчика = УИ_ОбщегоНазначенияКлиент.НовыйПараметрыОбработчикаСобытияОчистка(ЭтотОбъект,
																							 Элемент,
																							 "Значение");
	ПараметрыОбработчика.ДоступенКонтейнер = Истина;
	ПараметрыОбработчика.СтруктураХраненияЗначения = ТекДанные;

	УИ_ОбщегоНазначенияКлиент.ПолеФормыОбработчикОчистка(ПараметрыОбработчика, СтандартнаяОбработка);
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Применить(Команда)
	Закрыть(ХранилищеОтредактированнойСтруктуры());
КонецПроцедуры


#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция ХранилищеОтредактированнойСтруктуры()
	СтруктураХраненияЗначения = УИ_ОбщегоНазначенияКлиентСервер.НовыйСтруктураХраненияРеквизитаНаФормеСКонейнером("Значение");

	СтруктураВозврата = Новый Структура;

	Для Каждого СтрокаТаблицы Из ТаблицаСтрукутуры Цикл
		СтруктураВозврата.Вставить(СтрокаТаблицы.Ключ,
								   УИ_ОбщегоНазначенияКлиентСервер.ЗначениеПоляСКонтейнеромЗначения(СтрокаТаблицы,
																									СтруктураХраненияЗначения));
	КонецЦикла;

	Возврат УИ_ОбщегоНазначения.ЗначениеХранилищеКонтейнераСтруктуры(СтруктураВозврата);
КонецФункции

&НаСервере
Процедура ПрочитатьСтруктуруВТаблицу(СтруктураИсточник)
	СтруктураХраненияЗначения = УИ_ОбщегоНазначенияКлиентСервер.НовыйСтруктураХраненияРеквизитаНаФормеСКонейнером("Значение");
	
	ТаблицаСтрукутуры.Очистить();
	Для Каждого КлючЗначение Из СтруктураИсточник Цикл
		НоваяСтрока = ТаблицаСтрукутуры.Добавить();
		НоваяСтрока.Ключ = КлючЗначение.Ключ;
		УИ_ОбщегоНазначенияКлиентСервер.УстановитьЗначениеПоляСКонтейнером(НоваяСтрока,
																		   СтруктураХраненияЗначения,
																		   КлючЗначение.Значение);
	КонецЦикла;
КонецПроцедуры

#КонецОбласти
